Temperatura X Vendas Walmart
df = read.csv("../Walmart_sales.csv")
#Conferir se já não foi alterado e converter coluna 'Date pata formato Date
if ( class(df$Date) != "Date" ) {
df$Date = as.Date(df$Date, format = "%d-%m-%Y")
}
summary(df)
Store Date Weekly_Sales Holiday_Flag Min. : 1 Min. :2010-02-05 Min. : 209986 Min. :0.00000 1st Qu.:12 1st Qu.:2010-10-08 1st Qu.: 553350 1st Qu.:0.00000 Median :23 Median :2011-06-17 Median : 960746 Median :0.00000 Mean :23 Mean :2011-06-17 Mean :1046965 Mean :0.06993 3rd Qu.:34 3rd Qu.:2012-02-24 3rd Qu.:1420159 3rd Qu.:0.00000 Max. :45 Max. :2012-10-26 Max. :3818686 Max. :1.00000 Temperature Fuel_Price CPI Unemployment Min. : -2.06 Min. :2.472 Min. :126.1 Min. : 3.879 1st Qu.: 47.46 1st Qu.:2.933 1st Qu.:131.7 1st Qu.: 6.891 Median : 62.67 Median :3.445 Median :182.6 Median : 7.874 Mean : 60.66 Mean :3.359 Mean :171.6 Mean : 7.999 3rd Qu.: 74.94 3rd Qu.:3.735 3rd Qu.:212.7 3rd Qu.: 8.622 Max. :100.14 Max. :4.468 Max. :227.2 Max. :14.313
Gráfico de dispersão de Vendas Semanais vs. Temperatura:
Os pontos em azul representam todas as vendas.
Os pontos em vermelho destacam vendas ocorrendo em temperaturas abaixo de 32°F (congelamento).
import matplotlib.pyplot as plt
import seaborn as sns
# Converter a coluna de data para o formato correto
df['Date'] = pd.to_datetime(df['Date'], format='%d-%m-%Y')
# Criar o gráfico de dispersão Vendas x Temperatura
plt.figure(figsize=(10, 6))
sns.scatterplot(x=df['Temperature'], y=df['Weekly_Sales'], alpha=0.5, color='blue')
# Destacar temperaturas abaixo de 32°F
extreme_cold = df[df['Temperature'] < 32]
sns.scatterplot(x=extreme_cold['Temperature'], y=extreme_cold['Weekly_Sales'], color='red', label='Temp < 32°F')
plt.xlabel('Temperatura (°F)')
plt.ylabel('Vendas Semanais ($)')
plt.title('Impacto da Temperatura nas Vendas Semanais')
plt.legend()
plt.grid(True)
plt.show()
Comentário: Nas lojas onde a temperatura cai muito abaixo do ponto de congelamento (32°F), o impacto nas vendas é mais evidente. Isso se reflete especialmente no primeiro quartil do boxplot (rabicho inferior), indicando que temperaturas extremamente baixas estão associadas a quedas significativas nas vendas.
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
# Ignorar avisos futuros (opcional)
warnings.simplefilter(action='ignore', category=FutureWarning)
# Definir quartis da temperatura para categorização
df["Temp_Quartile"] = pd.qcut(df["Temperature"], q=4, labels=["Q1 (Frio)", "Q2", "Q3", "Q4 (Quente)"])
# Criar figuras para os gráficos
fig, axes = plt.subplots(1, 2, figsize=(15, 6))
# Boxplot das vendas por quartil de temperatura
sns.boxplot(x="Temp_Quartile", y="Weekly_Sales", data=df, ax=axes[0], hue="Temp_Quartile", palette="coolwarm", legend=False)
axes[0].set_title("Distribuição das Vendas por Quartil de Temperatura")
axes[0].set_xlabel("Quartis de Temperatura")
axes[0].set_ylabel("Vendas Semanais")
# Barplot somando as vendas por quartil de temperatura
sales_by_temp = df.groupby("Temp_Quartile", observed=False)["Weekly_Sales"].sum().reset_index()
sns.barplot(x="Temp_Quartile", y="Weekly_Sales", data=sales_by_temp, ax=axes[1], palette="coolwarm", hue="Temp_Quartile", legend=False)
axes[1].set_title("Total de Vendas por Quartil de Temperatura")
axes[1].set_xlabel("Quartis de Temperatura")
axes[1].set_ylabel("Vendas Semanais Totais")
# Melhorar o layout
plt.tight_layout()
plt.show()
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# Ler os dados
data_path = 'Walmart_Sales.csv'
df = pd.read_csv(data_path)
# Certificar-se de que a coluna 'Date' está em formato de data
df['Date'] = pd.to_datetime(df['Date'], format='%d-%m-%Y')
# Função para filtrar outliers
def filter_outliers(df, nstore):
Q1 = df[df['Store'] == nstore]['Weekly_Sales'].quantile(0.25)
Q3 = df[df['Store'] == nstore]['Weekly_Sales'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
return df[(df['Store'] == nstore) &
(df['Weekly_Sales'] > lower_bound) &
(df['Weekly_Sales'] < upper_bound)]
# Função para criar os gráficos com a paleta 'coolwarm'
def create_plots(nstore):
# Filtrar dados sem outliers e criar uma cópia
dfplot = filter_outliers(df, nstore).copy()
# Quartis da Temperatura
Q0_TEMP = dfplot['Temperature'].min()
Q1_TEMP = dfplot['Temperature'].quantile(0.25)
Q2_TEMP = dfplot['Temperature'].quantile(0.50)
Q3_TEMP = dfplot['Temperature'].quantile(0.75)
Q4_TEMP = dfplot['Temperature'].max()
# Labels para os quartis de temperatura
labels = [f"A: {round(Q0_TEMP, 2)} - {round(Q1_TEMP, 2)}",
f"B: {round(Q1_TEMP, 2)} - {round(Q2_TEMP, 2)}",
f"C: {round(Q2_TEMP, 2)} - {round(Q3_TEMP, 2)}",
f"D: {round(Q3_TEMP, 2)} - {round(Q4_TEMP, 2)}"]
# Atribuir quartis de temperatura
dfplot.loc[:, 'Temp_Quantile'] = pd.cut(dfplot['Temperature'],
bins=[Q0_TEMP, Q1_TEMP, Q2_TEMP, Q3_TEMP, Q4_TEMP],
labels=labels,
include_lowest=True)
# Agregar vendas semanais por quartil de temperatura
sums_temp = dfplot.groupby('Temp_Quantile', observed=False)['Weekly_Sales'].sum()
# Criar o gráfico 1 (Boxplot) com paleta de cores
plt.figure(figsize=(15, 7.5))
sns.boxplot(x='Temp_Quantile', y='Weekly_Sales', data=dfplot, palette='coolwarm', legend=False)
plt.title('Boxplot: Vendas Semanais por Quartil de Temperatura')
plt.ylabel('Weekly Sales (MM)')
plt.xlabel('Temperature Quartiles')
plt.suptitle(f'Boxplot de Vendas Semanais por Quartil de Temperatura - Loja {nstore} (Sem Outliers)', fontsize=14)
plt.show()
# Criar o gráfico 2 (Barplot) com paleta de cores
plt.figure(figsize=(15, 7.5))
sns.barplot(x=sums_temp.index.astype(str), y=sums_temp / 1e6, palette='coolwarm', legend=False) # Escala em milhões
plt.title('Barplot: Vendas Totais por Quartil de Temperatura')
plt.ylabel('Weekly Sales (MM)')
plt.xlabel('Temperature Quartiles')
plt.suptitle(f'Vendas Totais por Quartil de Temperatura - Loja {nstore} (Sem Outliers)', fontsize=14)
plt.show()
# Criar o gráfico de Vendas vs Temperatura (Dispersão) com cores
plt.figure(figsize=(15, 7.5))
plt.scatter(dfplot['Temperature'], dfplot['Weekly_Sales'],
c=dfplot['Temperature'], cmap='coolwarm', alpha=0.7)
plt.colorbar(label="Temperature (°F)")
plt.title(f'Vendas Semanais vs Temperatura - Loja {nstore}')
plt.xlabel('Temperature (°F)')
plt.ylabel('Weekly Sales (MM)')
plt.suptitle(f'Gráfico de Vendas Semanais vs Temperatura - Loja {nstore} (Sem Outliers)', fontsize=14)
plt.show()
# Exemplo de uso para todas as lojas de 1 a 45
for nstore in range(1, 46):
create_plots(nstore)
# Importar a biblioteca pandas
import pandas as pd
# Ler os dados
data_path = 'Walmart_Sales.csv'
df = pd.read_csv(data_path)
# Identificar as 10 piores semanas
worst_dates = df.nsmallest(5, 'Weekly_Sales')[['Date', 'Weekly_Sales', 'Temperature']]
print("As 5 piores semanas (menores vendas e temperaturas):")
print(worst_dates)
As 5 piores semanas (menores vendas e temperaturas):
Date Weekly_Sales Temperature
4619 03-12-2010 209986.25 52.82
4614 29-10-2010 213538.32 71.34
4675 30-12-2011 215359.21 51.60
4623 31-12-2010 219804.85 52.91
4671 02-12-2011 220060.35 59.12
As 5 piores semanas mostram a necessidade de um estudo mais aprofundado sobre o impacto da temperatura nas vendas semanais.
# Importar a biblioteca pandas
import pandas as pd
# Ler os dados
data_path = 'Walmart_Sales.csv'
df = pd.read_csv(data_path)
# Identificar as 5 melhores semanas
best_dates = df.nlargest(5, 'Weekly_Sales')[['Date', 'Weekly_Sales', 'Temperature']]
print("As 5 melhores semanas (maiores vendas e temperaturas):")
print(best_dates)
As 5 melhores semanas (maiores vendas e temperaturas):
Date Weekly_Sales Temperature
1905 24-12-2010 3818686.45 30.59
2763 24-12-2010 3766687.43 25.17
1333 24-12-2010 3749057.69 57.06
527 23-12-2011 3676388.98 35.92
1762 24-12-2010 3595903.20 34.90
Quando fechamos o resultado para as melhores 5 semanas ficam evidentes a temperatura baixa , só que devido as datas sempre serem no natal podemos descartar esse fato (outliers), 23 ou 24/12
import pandas as pd
# Ler os dados
data_path = 'Walmart_Sales.csv'
df = pd.read_csv(data_path)
# Converter a coluna 'Date' para o formato datetime
df['Date'] = pd.to_datetime(df['Date'], format='%d-%m-%Y')
# Função para determinar a estação com base no mês
def get_season(month):
if month in [12, 1, 2]:
return 'Inverno'
elif month in [3, 4, 5]:
return 'Primavera'
elif month in [6, 7, 8]:
return 'Verão'
else:
return 'Outono'
# Adicionar coluna 'Season' para a estação
df['Season'] = df['Date'].dt.month.apply(get_season)
# Agrupar por estação e calcular a soma das vendas
sales_by_season = df.groupby('Season')['Weekly_Sales'].sum()
print("Vendas totais por estação do ano:")
print(sales_by_season)
Vendas totais por estação do ano: Season Inverno 1.478165e+09 Outono 1.576562e+09 Primavera 1.796771e+09 Verão 1.885721e+09 Name: Weekly_Sales, dtype: float64
Os resultados mostraram a soma total das vendas para cada estação do ano, e agora podemos observar que:
Verão tem a maior soma de vendas, seguido por Primavera, Outono e Inverno.
As vendas mais altas no Verão são esperadas, já que é uma estação que pode envolver promoções sazonais, férias, e compras mais espontâneas.
Aqui estão algumas conclusões a partir dos dados:
Tendência Observada:
Verão e Primavera lideram em termos de vendas totais, o que pode indicar que essas estações são quando os consumidores estão mais dispostos a comprar, talvez devido a eventos como férias,
promoções ou mais tempo livre para ir às lojas.
Outono e Inverno têm vendas um pouco mais baixas. Embora o inverno envolva feriados como o Natal, que pode impulsionar as vendas, o impacto geral das vendas parece ser um pouco inferior,
possivelmente devido a condições climáticas mais severas ou outros fatores que influenciam as compras durante esse período.
Potenciais Análises:
Fatores Climáticos: Como as vendas são mais altas no verão, o clima mais quente pode incentivar mais pessoas a saírem para comprar, enquanto o inverno pode reduzir a mobilidade dos consumidores.
Eventos Sazonais: Durante a primavera e o verão, pode haver mais eventos promocionais, feriados (como as férias escolares ou o início de promoções de verão), que afetam positivamente as vendas.
Comportamento de Consumo: O comportamento do consumidor pode ser mais impulsionado por fatores externos como clima e eventos do que pela própria estação em termos climáticos,
considerando o aumento de compras online durante períodos mais frios.
import pandas as pd
# Ler os dados
data_path = 'Walmart_Sales.csv'
df = pd.read_csv(data_path)
# Converter a coluna 'Date' para o formato datetime
df['Date'] = pd.to_datetime(df['Date'], format='%d-%m-%Y')
# Definir as faixas de temperatura conforme solicitado
bins = [-float('inf'), 30, 50, 70, 100] # Ajuste os intervalos, excluindo >100°C
labels = ['<30°C', '30-50°C', '50-70°C', '70-100°C'] # Rótulos para as faixas
# Criar uma nova coluna 'Temp_Range' com as faixas de temperatura
df['Temp_Range'] = pd.cut(df['Temperature'], bins=bins, labels=labels)
# Calcular a média de vendas por faixa de temperatura, com o parâmetro 'observed=False' para evitar o warning
sales_by_temp_range = df.groupby('Temp_Range', observed=False)['Weekly_Sales'].mean()
print("Média de vendas por faixa de temperatura:")
print(sales_by_temp_range)
Média de vendas por faixa de temperatura: Temp_Range <30°C 1.017733e+06 30-50°C 1.118767e+06 50-70°C 1.047742e+06 70-100°C 1.006549e+06 Name: Weekly_Sales, dtype: float64
Temperaturas abaixo de 30°F têm vendas médias mais baixas, enquanto temperaturas entre 50°F e 70°F apresentam vendas médias mais altas. A faixa de temperatura entre 30°F e 50°F mostra um aumento nas vendas médias, mas não tão acentuado quanto a faixa de 50°F a 70°F.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# Carregar os dados
data_path = 'Walmart_Sales.csv'
df = pd.read_csv(data_path)
# Converter a coluna 'Date' para o formato de data, caso não esteja
df['Date'] = pd.to_datetime(df['Date'], errors='coerce')
# Remover outliers usando o IQR (Intervalo Interquartil) para todas as lojas
Q1 = df['Weekly_Sales'].quantile(0.25)
Q3 = df['Weekly_Sales'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
df = df[(df['Weekly_Sales'] > lower_bound) & (df['Weekly_Sales'] < upper_bound)]
# Identificar temperaturas extremas (abaixo de 30°F ou acima de 90°F) para todas as lojas
extreme_temperatures = df[(df['Temperature'] < 30) | (df['Temperature'] > 90)]
# Criar o gráfico de dispersão com linha de tendência para todas as lojas
def create_scatter_plot_with_trend(df, extreme_temperatures):
if df.empty:
print("Sem dados suficientes para gerar o gráfico.")
return
# Criar o gráfico para todas as lojas
plt.figure(figsize=(15, 7.5))
# Gráfico de dispersão
plt.scatter(df['Temperature'], df['Weekly_Sales'], color='blue', alpha=0.5, label='Dados de Vendas')
# Ordenar os dados por temperatura
df_sorted = df.sort_values('Temperature')
# Linha de tendência (Regressão Linear)
z = np.polyfit(df_sorted['Temperature'], df_sorted['Weekly_Sales'], 1) # Ajustar uma reta
p = np.poly1d(z) # Criar a função da reta
plt.plot(df_sorted['Temperature'], p(df_sorted['Temperature']), color='red', linewidth=2, label='Tendência Linear')
# Detalhes do gráfico
plt.title('Tendência: Redução das Vendas Devido Temperaturas Extremas em Todas as Lojas', fontsize=16)
plt.xlabel('Temperatura (°F)', fontsize=12)
plt.ylabel('Vendas Semanais (MM)', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)
plt.legend(fontsize=12)
plt.suptitle('Evidência da Redução de Vendas Devido Temperaturas Extremas', fontsize=14)
# Destacar as temperaturas extremas no gráfico
plt.scatter(extreme_temperatures['Temperature'], extreme_temperatures['Weekly_Sales'],
color='orange', alpha=0.7, label='Temperaturas Extremas')
plt.show()
# Gerar o gráfico para todas as lojas
create_scatter_plot_with_trend(df, extreme_temperatures)
Análise das Temperaturas Extremas para todas as lojas:
Temperaturas Extremas (abaixo de 30°F ou acima de 90°F): Temperature Weekly_Sales 910 -2.06 558027.77 3626 5.54 817485.14 2336 6.23 1083071.14 959 7.46 593875.46 5628 9.51 775910.43 ... ... ... 1597 99.22 912403.67 3885 99.22 1205884.98 4657 99.66 237095.82 4707 100.07 297753.49 4599 100.14 280937.84
[587 rows x 2 columns]
Total de Vendas nas Temperaturas Extremas: R$543,418,702.43 Vendas Médias nas Temperaturas Extremas: R$925,755.88
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# Carregar os dados
data_path = 'Walmart_Sales.csv'
df = pd.read_csv(data_path)
# Converter a coluna 'Date' para o formato de data, caso não esteja
df['Date'] = pd.to_datetime(df['Date'], errors='coerce')
# Filtrar apenas os dados da Loja 34
nstore = 34
dfplot = df[df['Store'] == nstore].copy()
# Remover outliers usando o IQR (Intervalo Interquartil)
Q1 = dfplot['Weekly_Sales'].quantile(0.25)
Q3 = dfplot['Weekly_Sales'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
dfplot = dfplot[(dfplot['Weekly_Sales'] > lower_bound) & (dfplot['Weekly_Sales'] < upper_bound)]
# Identificar temperaturas extremas (abaixo de 30°F ou acima de 90°F)
extreme_temperatures = dfplot[(dfplot['Temperature'] < 30) | (dfplot['Temperature'] > 90)]
# Criar o gráfico de dispersão com linha de tendência
def create_scatter_plot_with_trend(dfplot, extreme_temperatures, nstore):
if dfplot.empty:
print(f"Loja {nstore}: Sem dados suficientes para gerar o gráfico.")
return
plt.figure(figsize=(15, 7.5))
# Gráfico de dispersão
plt.scatter(dfplot['Temperature'], dfplot['Weekly_Sales'], color='blue', alpha=0.5, label='Dados de Vendas')
# Ordenar os dados por temperatura
df_sorted = dfplot.sort_values('Temperature')
# Linha de tendência (Regressão Linear)
z = np.polyfit(df_sorted['Temperature'], df_sorted['Weekly_Sales'], 1) # Ajustar uma reta
p = np.poly1d(z) # Criar a função da reta
plt.plot(df_sorted['Temperature'], p(df_sorted['Temperature']), color='red', linewidth=2, label='Tendência Linear')
# Detalhes do gráfico
plt.title(f'Tendência: Redução das Vendas Devido Temperaturas Extremas - Loja {nstore}', fontsize=16)
plt.xlabel('Temperatura (°F)', fontsize=12)
plt.ylabel('Vendas Semanais (MM)', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)
plt.legend(fontsize=12)
plt.suptitle(f'Evidência da Redução de Vendas Devido Temperaturas Extremas- Loja {nstore}', fontsize=14)
# Destacar as temperaturas extremas no gráfico
plt.scatter(extreme_temperatures['Temperature'], extreme_temperatures['Weekly_Sales'],
color='orange', alpha=0.7, label='Temperaturas Extremas')
plt.show()
# Gerar o gráfico para a Loja 34
create_scatter_plot_with_trend(dfplot, extreme_temperatures, nstore)
# Texto com informações extraídas
extreme_sales = extreme_temperatures[['Temperature', 'Weekly_Sales']].sort_values(by='Temperature')
print(f"Análise das Temperaturas Extremas para a Loja {nstore}:")
if not extreme_temperatures.empty:
print("\nTemperaturas Extremas (abaixo de 30°F ou acima de 90°F):")
print(extreme_sales)
# Insights sobre as vendas nas temperaturas extremas
print("\nAnalisando as Vendas nas Temperaturas Extremas:")
for index, row in extreme_sales.iterrows():
temp = row['Temperature']
sales = row['Weekly_Sales']
print(f"Temperatura: {temp}°F - Vendas Semanais: R${sales:,.2f}")
else:
print("Não há dados de temperaturas extremas para essa loja.")
Análise das Temperaturas Extremas para a Loja 34:
Temperaturas Extremas (abaixo de 30°F ou acima de 90°F):
Temperature Weekly_Sales
4771 23.82 971932.87
4767 24.50 900646.94
4772 28.66 1015654.60
4818 28.84 965512.36
Analisando as Vendas nas Temperaturas Extremas:
Temperatura: 23.82°F - Vendas Semanais: R$971,932.87
Temperatura: 24.5°F - Vendas Semanais: R$900,646.94
Temperatura: 28.66°F - Vendas Semanais: R$1,015,654.60
Temperatura: 28.84°F - Vendas Semanais: R$965,512.36
# Criar tabela das 10 lojas que menos vendem com redução de temperatura
def get_top_10_negative_corr(df):
corr_list = []
for store in df['Store'].unique():
temp_sales_corr = df[df['Store'] == store]['Temperature'].corr(df[df['Store'] == store]['Weekly_Sales'])
corr_list.append((store, temp_sales_corr))
# Ordenar por correlação negativa
sorted_corr = sorted(corr_list, key=lambda x: x[1])[:10]
# Converter em DataFrame para visualização
top_10_negative_corr = pd.DataFrame(sorted_corr, columns=['Store', 'Correlation'])
return top_10_negative_corr
# Gerar tabela
top_10_stores = get_top_10_negative_corr(df)
print(top_10_stores)
Store Correlation 0 10 -0.432569 1 12 -0.379416 2 3 -0.377524 3 28 -0.376506 4 30 -0.330816 5 8 -0.312324 6 37 -0.300493 7 2 -0.297673 8 34 -0.278523 9 11 -0.278503
A análise das 10 lojas que apresentam maior correlação negativa entre temperatura e vendas semanais evidencia uma tendência nas regiões com temperaturas severas. Essas áreas são impactadas por condições climáticas extremas, que reduzem a circulação de clientes nas lojas e afetam diretamente o volume de vendas. Esse padrão demonstra como a sazonalidade e fatores regionais influenciam o desempenho comercial, reforçando a importância de estratégias personalizadas para atender às necessidades específicas dos consumidores em locais com temperaturas extremas.
top_10_stores.plot.bar(x='Store', y='Correlation', color='red', title='Top 10 Lojas com Maior Impacto Negativo de Temperatura')
plt.xlabel('Lojas')
plt.ylabel('Correlação')
plt.show()
import os
# Certificar-se de que a pasta para salvar gráficos existe
output_dir = "gráficos"
os.makedirs(output_dir, exist_ok=True) # Cria a pasta se ela não existir
import os
import pandas as pd
import matplotlib.pyplot as plt
# Certificar-se de que a pasta para salvar gráficos existe
output_dir = "gráficos"
os.makedirs(output_dir, exist_ok=True) # Cria a pasta se ela não existir
# Carregar os dados
data_path = 'Walmart_Sales.csv' # Substitua pelo caminho correto do seu arquivo
df = pd.read_csv(data_path)
# Converter a coluna 'Date' para o formato de data e ordenar por data
df['Date'] = pd.to_datetime(df['Date'], format='%d-%m-%Y')
df.sort_values('Date', inplace=True)
# Agrupar as vendas por semana e por temperatura
df_grouped = df.groupby(['Date']).agg({'Weekly_Sales': 'sum', 'Temperature': 'mean'}).reset_index()
# Função para criar o gráfico combinado de linha
def plot_sales_temperature_comparison(df, save_path=None):
plt.figure(figsize=(15, 7.5))
# Plotar vendas semanais no eixo primário
plt.plot(df['Date'], df['Weekly_Sales'], color='dodgerblue', label='Vendas Semanais', marker='o')
plt.ylabel('Vendas Semanais (MM)', fontsize=12, color='dodgerblue')
plt.xlabel('Data', fontsize=12)
# Configurar segundo eixo-y para temperatura
ax = plt.gca()
ax2 = ax.twinx()
ax2.plot(df['Date'], df['Temperature'], color='coral', linestyle='--', label='Temperatura (°F)', marker='x')
ax2.set_ylabel('Temperatura (°F)', fontsize=12, color='coral')
ax2.tick_params(axis='y', labelcolor='coral')
# Adicionar título e legendas
plt.title(f'Comparação de Vendas Totais e Temperatura', fontsize=16)
ax.legend(loc='upper left', fontsize=10)
ax2.legend(loc='upper right', fontsize=10)
plt.grid(True, linestyle='--', alpha=0.7)
# Salvar gráfico
if save_path:
plt.savefig(f"{save_path}/sales_temperature_total.png")
print(f"Gráfico salvo em: {save_path}/sales_temperature_total.png")
plt.show()
# Gerar o gráfico
plot_sales_temperature_comparison(df_grouped, save_path=output_dir)
# Resumo textual dos melhores indicadores
max_sales = df_grouped.loc[df_grouped['Weekly_Sales'].idxmax()]
max_temp = df_grouped.loc[df_grouped['Temperature'].idxmax()]
melhor_periodo_vendas = max_sales['Date'].strftime('%d-%m-%Y')
melhor_venda = max_sales['Weekly_Sales']
melhor_periodo_temp = max_temp['Date'].strftime('%d-%m-%Y')
melhor_temperatura = max_temp['Temperature']
# Exibir o resumo
resumo = f"""
Resumo dos Melhores Indicadores:
- Melhor pico de vendas: {melhor_venda:.2f} MM em {melhor_periodo_vendas}
- Melhor pico de temperatura: {melhor_temperatura:.2f}°F em {melhor_periodo_temp}
"""
print(resumo)
# Análise da relação entre Temperatura e Vendas
correlacao = df_grouped[['Weekly_Sales', 'Temperature']].corr().iloc[0, 1]
# Conclusão
conclusao = f"""
Análise da Relação Temperatura x Vendas:
A correlação entre as vendas semanais e a temperatura é de {correlacao:.2f}.
Isso sugere uma { 'correlação positiva' if correlacao > 0 else 'correlação negativa' if correlacao < 0 else 'ausência de correlação'} entre essas duas variáveis.
Ou seja, um aumento (ou diminuição) na temperatura parece (ou não) estar associado a um aumento (ou diminuição) nas vendas.
Conclusão: A variação de temperatura pode ter um impacto importante sobre as vendas, com certos picos de vendas ocorrendo durante temperaturas mais altas ou mais baixas,
dependendo do comportamento do consumidor e da natureza dos produtos vendidos.
"""
print(conclusao)
Gráfico salvo em: gráficos/sales_temperature_total.png
Resumo dos Melhores Indicadores: - Melhor pico de vendas: 80931415.60 MM em 24-12-2010 - Melhor pico de temperatura: 82.18°F em 22-07-2011 Análise da Relação Temperatura x Vendas: A correlação entre as vendas semanais e a temperatura é de -0.16. Isso sugere uma correlação negativa entre essas duas variáveis. Ou seja, um aumento (ou diminuição) na temperatura parece (ou não) estar associado a um aumento (ou diminuição) nas vendas. Conclusão: A variação de temperatura pode ter um impacto importante sobre as vendas, com certos picos de vendas ocorrendo durante temperaturas mais altas ou mais baixas, dependendo do comportamento do consumidor e da natureza dos produtos vendidos.